-- NVIM基本配置
--
-- vim.g.{name}: 全局变量
-- vim.b.{name}: 缓冲区变量
-- vim.w.{name}: 窗口变量
-- vim.bo.{option}: buffer-local 选项
-- vim.wo.{option}: window-local 选项
-- vim.env.{name}: 定义当前会话中的环境变量值
--

local opt = vim.opt
local g = vim.g
local cmd = vim.api.nvim_command


cmd("language en_US")
cmd("filetype plugin on")
cmd("syntax on")

-- 右侧参考线，超过表示代码太长了，考虑换行
vim.wo.colorcolumn = "120"
vim.scriptencoding = 'utf-8'

if vim.fn.has("termguicolors") then
	opt.termguicolors = true
end

--定义全局配置
local options = {
    clipboard = 'unnamedplus', --同步系统剪贴板
    cmdheight = 1, -- 设置命令行高度为1
    showcmd = true, --右下角显示命令
    showmode = true, --右下角显示模式
    signcolumn = "yes", -- 显示左侧图标指示列
    background = "dark",
    showtabline = 2, -- 每个分割窗口都有单独的状态行
    scrolloff = 10, --光标以上和以下保持的最小屏幕行数
    wildoptions = 'pum', --有补全选项时，将显示一个带有可用选择的弹出菜单
    pumblend = 5, --弹出菜单的透明度，5是稍微透明，最大值100（全透明）
    whichwrap = "<,>,[,]", --光标在行首尾时<left><right>可跳到下一行
    hidden = true, --允许隐藏被修改过的buffer
    autoread = true, --文件被外部修改时自动加载
    splitright = true, --默认新窗口右和下
    splitbelow = true,

    conceallevel = 0,
    updatetime = 100,
    timeoutlen = 500, --设置 timeoutlen 为等待键盘快捷键连击时间500毫秒，可根据需要设置

    completeopt = "menu,menuone,noselect,noinsert", --自动补全不自动选中
    wildmenu = true, --补全增强

    backup = false,  --禁止生成备份文件
    writebackup = false,
    swapfile = false,


    termguicolors = true, --如果安装第三方主题，必须设置为true
    mouse = 'a', --允许鼠标
    fileencoding = 'utf-8', --utf8编码
    encoding = 'utf-8',

    ignorecase = true, --查找时忽略大小写
    smartcase = true, --智能大小写
    incsearch = true, --边输入边搜索
    hlsearch = true, --搜索时不要高亮

    smartindent = true, --智能锁进
    cindent = true,
    autoindent = true, --自动缩进
    
    tabstop = 4, --Tab宽度
    shiftwidth = 4, --每次Shift调整的缩进
    softtabstop = 4,
    expandtab = true, --空格代替tab
    shiftround = true,

    number = true, --行号
    relativenumber = true, --相对行号
    wrap = false, --不自动换行
    cursorline = true, --高亮当前行
    cursorcolumn = false, --不高亮当前列
    
    foldmethod = "indent", --折叠
    foldenable = false,
    foldlevel = 99,
}
--更多选项可以在Vim中:set all查询

vim.opt.shortmess:append 'c'

for k, v in pairs(options) do
    vim.opt[k] = v
end

-- 定义buffer配置
local buffer_options = {
    shiftwidth = 4, --每次Shift调整的缩进
    autoindent = true, --自动缩进
    autoread = true, --文件被外部修改时自动加载
}
for k, v in pairs(buffer_options) do
    vim.bo[k] = v
end
   
  
if vim.fn.has('gui_running') then 
    --在vim中可以使用字符串分号分隔设置多个字体，neovim中报错
    --opt.guifont="DejaVu Sans Mono for Powerline:h12"
    if vim.fn.has('win32') then
        --opt.guifont = {"FiraCode_Nerd_Font_Mono","SauceCodePro_NFM","Cascadia_Mono_NF","Consolas"}
        opt.guifont = "FiraCode Nerd Font Mono:h12"
    elseif vim.fn.has('linux') then
        --opt.guifont="JetBrainsMono_NFM:h14"
    end
    --opt.guifont={"JetBrainsMono_NFM",     "SauceCodePro_NFM",     "Cascadia Mono NF",    "Consolas","h14"}
    --opt.guifont="JetBrainsMono NFM:h14"
    --opt.guifont="SauceCodePro NFM:h14"
end
  

-- 到时候插件要安装文件管理器 nvim-tree，所以需要在文件的开头禁用 netrw = 1 是告诉Neovim netrw 已经载入了，不需要再载入
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1

-- 清除所有之前定义的 autocmd 并从干净的状态开始
vim.cmd('autocmd!')

